import { mount } from 'vue-test-utils'
import door from 'src/views/button/src/door.vue'

describe('door', () => {
  it('door 基础渲染用例: { class }', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(door, {})
    expect(vm.classes().includes('x-door')).to.be.equal(true)
  })

  it('door 事件用例: { class }', async () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(door, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      },
      data () {
        return {
          loading: true
        }
      }
    })
    await vm.trigger('click')
    expect(typeof vm.vm.stv).to.be.equal('number')
    expect(vm.vm.loading).to.be.equal(true)
  })

  it('door 初始插槽用例', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(door, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      },
      slots: {
        default: '<el-button>按钮</el-button>'
      }
    })
    expect(vm.html().includes('<el-button>按钮</el-button>')).to.be.equal(true)
  })

  it('door 有power权限用例', () => {
    // 挂载全局方法，模拟有权限的情况
    window.store = {
      getters: {
        getDictByNode: () => {
          return { valid: true }
        }
      }
    }
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(door, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      },
      slots: {
        default: '<el-button>按钮</el-button>'
      },
      propsData: {
        power: 'valid'
      }
    })
    console.log(vm.vm.hasPower)
    expect(vm.vm.isShow).to.be.equal(true)
    window.store = null // 初始化，避免污染其他用例
  })

  it('door 没有power权限用例', () => {
    // 挂载全局方法，模拟没有权限的情况
    window.store = {
      getters: {
        getDictByNode: () => {
          return { valid: true }
        }
      }
    }
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(door, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      },
      slots: {
        default: '<el-button>按钮</el-button>'
      },
      propsData: {
        power: 'notValid'
      }
    })
    expect(vm.vm.isShow).to.be.equal(false)
    window.store = null // 初始化，避免污染其他用例
  })

  it('door 只存在字典用例', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(door, {
      mocks: {
        $plugins: window.$plugins // 挂载全局方法
      },
      slots: {
        default: '<el-button>按钮</el-button>'
      },
      propsData: {
        dictNode: 'org_dict_node'
      }
    })
    // 只有字典无需校验权限
    expect(vm.vm.isShow).to.be.equal(true)
  })
})
